wayland: clean up stride calculation when creating shm surface
authorRay Strode <rstrode@redhat.com>
Wed, 20 Jan 2016 16:40:34 +0000 (11:40 -0500)
committerRay Strode <rstrode@redhat.com>
Wed, 20 Jan 2016 19:29:15 +0000 (14:29 -0500)
Right now, we assume the stride for the image surface needs to
be 4 byte aligned.  This is, in fact, true, but it's better to
ask cairo for the alignment requirement directly rather than
assume we know the alignment rules.

This commit changes the code to use cairo_format_stride_for_width
to calculate a suitable rowstride for pixman.

https://bugzilla.gnome.org/show_bug.cgi?id=760897

gdk/wayland/gdkdisplay-wayland.c

index 2f0c64e52149ae1c79f94ac8b2d91788118a85ef..bf3c20c8a918b5d8fc0f82b0b82ac841053cd40e 100644 (file)
@@ -1005,7 +1005,7 @@ _gdk_wayland_display_create_shm_surface (GdkWaylandDisplay *display,
   data->scale = scale;
   data->busy = FALSE;
 
-  stride = width * 4;
+  stride = cairo_format_stride_for_width (CAIRO_FORMAT_ARGB32, width*scale);
 
   data->pool = create_shm_pool (display->shm,
                                 width*scale, height*scale,
@@ -1016,11 +1016,11 @@ _gdk_wayland_display_create_shm_surface (GdkWaylandDisplay *display,
                                                  CAIRO_FORMAT_ARGB32,
                                                  width*scale,
                                                  height*scale,
-                                                 stride*scale);
+                                                 stride);
 
   data->buffer = wl_shm_pool_create_buffer (data->pool, 0,
                                             width*scale, height*scale,
-                                            stride*scale, WL_SHM_FORMAT_ARGB8888);
+                                            stride, WL_SHM_FORMAT_ARGB8888);
   wl_buffer_add_listener (data->buffer, &buffer_listener, surface);
 
   cairo_surface_set_user_data (surface, &gdk_wayland_cairo_key,